package ltd.hxya.novel.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ltd.hxya.novel.admin.entity.Operation;
import ltd.hxya.novel.admin.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import ltd.hxya.novel.admin.entity.UserOperation;
import ltd.hxya.novel.admin.vo.UserVo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author hty
 * @since 2022-10-03
 */
public interface IUserService extends IService<User> {

    User getUserByUsername(String username);

    String login(User user);

    UserVo info() throws ExecutionException, InterruptedException;

    Page<UserVo> grantedUser(UserVo userVo);

    Page<UserVo> ungrantedUser(UserVo userVo);

    Page<Operation> noHasPermission(User user);

    void addPermission(UserOperation userOperation);

    Page<Operation> hasPermission(Integer userId);

    void deletePermission(UserOperation userOperation);


    void disableAccount(User user);

    void logout();

    Page<User> userList(User user);

    // 添加管理员
    void addUser(UserVo userVo);

    // 根据id删除管理员，删除管理员的时候还要删除user_operation和user_role表
    void deleteById(Integer[] ids);

    // 根据adminId查询管理员
    UserVo roleInfo(Integer userId);

    // Admin的修改的处理
    void updateRole(UserVo userVo);

    /**
     * 判断用户是否允许操作
     * @param user 用户信息
     */
    void checkUserAllowed(User user);

    void updateByUserId(User userById);

}
